#!/bin/sh

version=`/usr/bin/sw_vers -productVersion | cut -d '.' -f 1,2`
timestamp=`date +%Y-%m-%d-%H%M`

function remove_file()
{
    if /bin/rm -f "$1"; then
        echo "removing file $1"
    else
        echo "*** remove $1 failed with error: $?"
    fi
}

function remove_symlink()
{
    if readlink "$1" | grep "$2"
    then
        if /bin/rm -f "$1"; then
            echo "removing symlink $1"
        else
            echo "*** remove $1 failed with error: $?"
        fi
    else
        echo "*** not removing $1 not matching $2"
    fi
}

function remove_recursive()
{
    if /bin/rm -rf "$1"; then
        echo "removing directory $1"
    else
        echo "*** removing $1 failed with error: $?"
    fi
}

function remove_pkg()
{
    echo "removing package $1"
    remove_recursive "/Library/Receipts/$1"
}

function remove_pkg_snowleopard()
{
    echo "removing package $1"
    remove_recursive "/private/var/db/receipts/com.aladdin.$1.pkg.bom"
    remove_recursive "/private/var/db/receipts/com.aladdin.$1.pkg.plist"
}

function remove_safenet_pkg_snowleopard()
{
  echo "removing package $1"
  remove_recursive "/private/var/db/receipts/com.safenet.safenetAuthenticationClient.$1.pkg.bom"
  remove_recursive "/private/var/db/receipts/com.safenet.safenetAuthenticationClient.$1.pkg.plist"
}

function backup_file()
{
    echo "backing up $1"
    if [ -f "$1" ]; then
        mv "$1" "$1.saved-${timestamp}"
    fi
}

#### Fix For CSR# 87783 - Its for Snowleopard Only

if [ "$version" = "10.6" -o "$version" = "10.7" ] ; then

	sfntMonDPlist="/Library/LaunchDaemons/com.safenet.SfntMonD.plist"

	if /bin/launchctl unload "$sfntMonDPlist"; then
    		echo "stop sfntMonD daemon"
	else
    		echo "*** stopping sfntMonDPlist failed with error: $?"
	fi

	remove_file "$sfntMonDPlist"

fi


#### Stop and unload eTSrv

eTSrvPlist="/Library/LaunchDaemons/com.aladdin.eTSrv.plist"

if /bin/launchctl unload "$eTSrvPlist"; then
    echo "stop eTSrv daemon"
else
    echo "*** stopping eTSrv failed with error: $?"
fi

remove_file "$eTSrvPlist"
remove_file "/tmp/eTSrv" # The socket
remove_pkg "comaladdinetsrv.pkg"

#### Stop and unload SACSrv

SACSrvPlist="/Library/LaunchDaemons/com.safenet.SACSrv.plist"

if /bin/launchctl unload "$SACSrvPlist"; then
echo "stop SACSrv daemon"
else
echo "*** stopping SACSrv failed with error: $?"
fi

remove_file "$SACSrvPlist"
remove_file "/tmp/SACSrv" # The socket
#remove_pkg "comaladdinetsrv.pkg"


#### Removing records from Security Service serurityd
/tmp/remove-securityd-plist

#### Removing records from reader.conf (PCSCD configuration file)
/etc/Token/uninstallation/eTokenFramework/remove-reader

sudo rm -rf /etc/Token

#### Stop and unload PKIMonitor

    PKIMonitorPlist="/Library/LaunchAgents/com.aladdin.PKIMonitor.plist"

    if /bin/launchctl unload "$PKIMonitorPlist"; then
        echo "stop PKIMonitor failed"
    else
        echo "*** stopping PKIMonitor failed with error: $?"
    fi

remove_file "$PKIMonitorPlist"

# Stop all intances of all users
/usr/bin/killall -v PKIMonitor

# Stop all intances of all users
/usr/bin/killall -v SACTools


#### Stop and unload SACMonitor

SACMonitorPlist="/Library/LaunchAgents/com.safenet.SACMonitor.plist"

if /bin/launchctl unload "$SACMonitorPlist"; then
echo "stop SACMonitor failed"
else
echo "*** stopping SACMonitor failed with error: $?"
fi

remove_file "$SACMonitorPlist"

# Stop all intances of all users
/usr/bin/killall -v SACMonitor


#### Driver

##if [ "$version" = "10.9" -o "$version" = "10.10" ] ; then

echo "remove drivers Maverics or Yosemite"
drivers_dir1="/usr/libexec/SmartCardServices/drivers"
tokend_dir1="/System/Library/Security/tokend"

##else

echo "remove drivers El Capitan"
drivers_dir2="/usr/local/libexec/SmartCardServices/drivers"
tokend_dir2="/Library/Security/tokend"

##fi

remove_recursive "${drivers_dir1}/aks-ifdh.bundle"
remove_recursive "${drivers_dir1}/aks-vr.bundle"
remove_recursive "${drivers_dir1}/ikey-ifdh.bundle"
remove_recursive "${drivers_dir1}/eTokenIfdh.bundle"
remove_recursive "${drivers_dir1}/eTokenVR.bundle"

remove_pkg "etokendriversleopard.pkg" #10.5

#### Tokend

remove_recursive "${tokend_dir1}/eTokend.bundle"
remove_recursive "${tokend_dir1}/ETOKEND.tokend"
remove_pkg "etokentokend.pkg"

###########

remove_recursive "${drivers_dir2}/aks-ifdh.bundle"
remove_recursive "${drivers_dir2}/aks-vr.bundle"
remove_recursive "${drivers_dir2}/ikey-ifdh.bundle"
remove_recursive "${drivers_dir2}/eTokenIfdh.bundle"
remove_recursive "${drivers_dir2}/eTokenVR.bundle"

remove_recursive "${tokend_dir2}/eTokend.bundle"
remove_recursive "${tokend_dir2}/ETOKEND.tokend"


#### Framework

# Symlinks
remove_file "/usr/local/lib/libeToken.dylib"
remove_file "/usr/local/lib/libeTPkcs11.dylib"
remove_file "/usr/local/lib/libSACUI.dylib"
remove_file "/usr/local/lib/libSACLog.dylib"

remove_file "/usr/local/lib/libeTokenUI.dylib"
remove_file "/usr/local/lib/etPropBasic.dylib"
remove_file "/usr/local/lib/libeTSapi.dylib"

remove_file "/usr/local/lib/libIDPrimePKCS11.dylib"

remove_file "/usr/local/lib/pkcs11/libeTpkcs11.dylib"
remove_symlink "/usr/local/lib/pkcs11/libIDPrimePKCS11.dylib" "eToken"
remove_symlink "/usr/local/lib/pkcs11/libgclib.dylib" "eToken"

# remove directory if empty
rmdir "/usr/local/lib/pkcs11"

remove_recursive "/Library/Frameworks/eToken.framework"
remove_pkg etoken.pkg
remove_pkg etokenconf.pkg
remove_pkg scripts.pkg

remove_pkg etokenframework.pkg

#### eToken applications

remove_recursive "/Applications/SafeNet"
remove_recursive "/Applications/Token"
remove_recursive "/Applications/eToken"
remove_pkg etokenapplications.pkg
remove_pkg etokenpkimonitortiger.pkg
remove_pkg etokenpkimonitorleopard.pkg


#### Conf

backup_file "/etc/eToken.common.conf"
backup_file "/etc/eToken.conf"
remove_pkg "etokenconf.pkg"
# Remove all users configs (ex., /Users/user/.eToken.conf)
eTokenUserConfDirs=`find /Users -maxdepth 2 -name .eToken.conf 2> /dev/null`
for sacConfigFiles in $eTokenUserConfDirs
  do
      #echo $pkiConfigFiles
       rm -f $sacConfigFiles
  done
echo "Removing SafeNet Authentication Client configurations per every user ....done."


#### Cache directory

remove_recursive /var/cache/eToken


#### Help

remove_file /usr/share/doc/eToken

#### Remove Lock file for all readers

remove_file /tmp/etoken_lock_*

#### Remove package receipts for snowleopad and Lion

if [ "$version" = "10.6" -o "$version" = "10.7" -o "$version" = "10.8" ] ; then
        remove_pkg_snowleopard "eTokenSrv"
	remove_pkg_snowleopard "Applications"
	remove_pkg_snowleopard "eTokenFramework"
	remove_pkg_snowleopard "eTokenIfdh-10.5"
	remove_pkg_snowleopard "PKIMonitorLeopard"
	remove_pkg_snowleopard "PostInstallScripts"
	remove_pkg_snowleopard "eTokenConf"
	remove_pkg_snowleopard "eTokenTokend"
        remove_pkg_snowleopard "etokenPkiClient.postflight"

  remove_safenet_pkg_snowleopard "eToken"
  remove_safenet_pkg_snowleopard "eTokenFramework"
  remove_safenet_pkg_snowleopard "eTokenConf"
  remove_safenet_pkg_snowleopard "scripts"

fi
